﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using DevExpress.Xpf.Core;
using DevExpress.Xpf.Bars;
using DevExpress.Xpf.Layout.Core;
using DevExpress.Xpf.Docking;
using System.Timers;
using ChatApp.Client.Common;
using ChatApp.Client.ChatAppServiceReference;
using System.ServiceModel;

namespace ChatApp.Client
{
    public partial class MainWindow : DXWindow, IChatAppServiceCallback
    {
        private ChatAppServiceClient service;

        public MainWindow()
        {
            InitializeComponent();
            service = new ChatAppServiceClient(new InstanceContext(this));
            ChatAppGlobal.FormMainWindow = this;

            ChatAppGlobal.ListAddFriend = service.RetrieveAllAddFriend(ChatAppGlobal.UserLogin.UserName);
            ucListChatControl.BindListDanhSachBanBe();
            ucListChatControl.txtTenDangNhap.Text = ChatAppGlobal.UserLogin.UserName;
        }

        private void DXWindow_Closed(object sender, EventArgs e)
        {
            this.Close();
            ChatAppGlobal.FormLogin.Show();
        }

        private void bExit_ItemClick(object sender, ItemClickEventArgs e)
        {
            this.Close();
            ChatAppGlobal.FormLogin.Show();
        }

        /// <summary>
        /// Trình diễn UserControl ra vị trí Panel chính: giữa màn hình
        /// </summary>
        /// <param name="caption">Tiêu đề của Tab</param>
        /// <param name="pathUserControl">Đường dẫn của Tab và tên UserControl</param>
        /// <param name="isAddTabUserControl">Là Add Tab mới</param>
        public void ShowUserControl(string tenRoom
                                        , int idRoom
                                        , bool laChatRoom
                                        , List<string> listUserNameReceive
                                        , bool showIconCanhBao)
        {
            // Khởi tạo 1 panel mới
            LayoutPanel mainPanel = new LayoutPanel();
            mainPanel.Caption = tenRoom;
            mainPanel.TabCaption = tenRoom;
            mainPanel.Name = tenRoom;
            mainPanel.Content = new ucChat(tenRoom, idRoom, listUserNameReceive, laChatRoom);
            mainPanel.ShowPinButton = false;
            mainPanel.AllowDrag = false;

            if (showIconCanhBao)
            {
                BitmapImage img = new BitmapImage();
                img.BeginInit();
                img.UriSource = new Uri(@"pack://application:,,,/ChatApp.Client;component/Images/Icons/chat.png");
                img.EndInit();
                mainPanel.CaptionImage = img;
            }
            else
            {
                mainPanel.CaptionImage = null;
            }
            

            // Nếu trước đó chưa có tab group có tên là Tabb thì add tab group vào
            if (dockLayoutManagerMain.LayoutRoot.Items.FirstOrDefault(u => u.Name == "Tabb") == null)
            {
                // Tạo mới tab group: Tabb
                TabbedGroup Tabb = new TabbedGroup();
                Tabb.Name = "Tabb";
                Tabb.AllowDrag = false;

                // Trường hợp đóng tất cả các tab còn lại 1 tab thì Devexpress đã bị xóa Tabb nhưng còn lại 1 LayoutPanel
                // Backup LayoutPanel đang tồn tại duy nhất đó lại
                LayoutPanel layoutExisting = dockLayoutManagerMain.LayoutRoot.Items.FirstOrDefault() as LayoutPanel;

                // Kiểm tra xem LayoutPanel cuối cùng đó hiện có đang tồn tại hay không. Có phải đúng là kiểu LayoutPanel hay không
                // Nếu cón tồn tại thực hiện hủy tất cả các LayoutPanel còn nằm lưu lạc trong TabbedGroup lang thang nào đó không biết
                if (layoutExisting != null && dockLayoutManagerMain.LayoutRoot.Items.Count == 1)
                {
                    dockLayoutManagerMain.LayoutRoot.Clear();
                    dockLayoutManagerMain.LayoutRoot.DestroyOnClosingChildren = true;
                }

                // Nếu là LayoutPanel đã hủy đó có tồn tại trước đó thì thực hiện add vào TabbedGroup có tên cố định là Tabb
                if (layoutExisting != null)
                {
                    Tabb.Items.Add(layoutExisting);
                }

                // Thực hiện add TabbedGroup vào LayoutGroup
                dockLayoutManagerMain.LayoutRoot.Add(Tabb);
            }

            // Thực hiện tìm kiếm TabbedGroup có tên cố định là Tabb
            TabbedGroup TabbAdded = dockLayoutManagerMain.LayoutRoot.Items.First(u => u.Name == "Tabb") as TabbedGroup;
            TabbAdded.TabHeadersAutoFill = true;

            // Add panel vào có tên cố định là Tabb
            TabbAdded.Items.Add(mainPanel);

            // nếu hiển thị người dùng khác mà không hiển thị Icon thì không cần mở Tab này lên trước mà nằm ẩn ở sau
            if (!showIconCanhBao)
            {
                // Kích hoạt tab mới với panel mới đc add
                this.dockLayoutManagerMain.DockController.Activate(mainPanel);
            }
        }

        private void dockLayoutManagerMain_DockItemClosed(object sender, DevExpress.Xpf.Docking.Base.DockItemClosedEventArgs e)
        {
            LayoutPanel layoutPanel = e.Item as LayoutPanel;
            ucChat controlChat = layoutPanel.Control as ucChat;
            if(controlChat != null && controlChat.laChatRoom)
            {
                ChatAppGlobal.SoLuongRoom -= 1;
            }
        }

        private void dockLayoutManagerMain_DockItemActivated(object sender, DevExpress.Xpf.Docking.Base.DockItemActivatedEventArgs e)
        {
            LayoutPanel layoutPanel = e.Item as LayoutPanel;
            if (layoutPanel != null)
            {
                layoutPanel.CaptionImage = null;
            }
        }

        public void RefreshContentChat(int idRoom, string tenRoom, string userNameSend, string textChat, bool laChatRoom)
        {
        }
    }
}
